<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
  </head>
  <body>
    <div id="app">
      <input v-model="value" />
      <hr />
      <ul v-for="item in list">
        <li>{{item.city}} : {{item.count}}: {{item.name}}</li>
      </ul>
    </div>
    <script src="https://unpkg.com/axios/dist/axios.min.js"></script>
    <script src="https://cdn.jsdelivr.net/npm/vue@2.6.14/dist/vue.js"></script>
    <script src="../utils/index.js"></script>
    <script>
      const vm = new Vue({
        el: '#app',
        /**
         * @name data:放置数据地方,一般用函数形式，
         */
        data() {
          return {
            list: [],
            value: '',
          }
        },
        /**
         * @name watch:监听数据变化，可以处理异步数据
         * 如何使用：如果想监听哪个属性，把他写成函数形式，在watch中，函数的第一个参数就是新值
         */
        watch: {
          value(newVal, oldVal) {
            if (!newVal) {
              this.getData()
              return
            }
            this.filterforCity(newVal)
          },
        },
        /**
         * @name computed:计算属性 一般放置大量数据计算的函数
         */
        computed: {},
        /**
         * @name 生命周期:一般不通的生命周期用来添加不通的代码
         */
        created() {
          // 请求数据
          this.getData()
        },
        mounted() {
          // 操作dom
        },
        /**
         * @name methods:方法 放置函数或者方法
         */
        methods: {
          // 防抖函数
          filterforCity: debounce(function (newVal) {
            this.list = this.list.filter((v) => v.city === newVal)
            console.log('city', this.list)
          }, 500),
          async getData() {
            const res = await createData()
            this.list = res.data
            console.log('res:', res.data)
            // 数据必须保存在data中，才能渲染在上面的那个#app这个区域中
          },
        },
      })
      function createData() {
        return new Promise((resolve, reject) => {
          resolve({
            code: 0,
            msg: 'success',
            data: [
              {
                id: 1,
                count: 20,
                name: '丰田凯美瑞',
                city: '北京',
              },
              {
                id: 2,
                count: 22,
                name: '本田雅阁',
                city: '北京',
              },
              {
                id: 3,
                count: 25,
                name: '大众迈腾',
                city: '北京',
              },
              {
                id: 4,
                count: 22,
                name: '本田雅阁',
                city: '上海',
              },
              {
                id: 5,
                count: 25,
                name: '大众迈腾',
                city: '上海',
              },
            ],
          })
        })
      }
    </script>
  </body>
</html>
